package cn.iocoder.yudao.module.api.pay.order;

import cn.iocoder.yudao.module.api.pay.order.dto.PayOrderCreateDTO;
import cn.iocoder.yudao.module.api.pay.order.vo.PayOrderVO;
import jakarta.validation.Valid;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 支付单 API 接口
 *
 * @author LeeYan9
 * @since 2022-08-26
 */
public interface PayOrderApi {

    /**
     * 创建支付单
     *
     * @param dto 创建请求
     * @return 支付单号
     */
    String createOrder(@Valid PayOrderCreateDTO dto);

    /**
     * 获得支付单
     *
     * @param no 支付单号
     * @return 支付单
     */
    PayOrderVO getOrderByNo(String no);

    /**
     * 获得支付单
     *
     * @param tradeNo 交易单号
     * @return 支付单
     */
    PayOrderVO getOrderByTradeNo(String tradeNo);

    /**
     * 更新付款单据价格
     *
     * @param no       支付单号
     * @param payPrice 支付单价
     */
    void updatePayOrderPrice(String no, Integer payPrice);

    /**
     * 关闭支付单
     *
     * @param no 支付单号
     */
    void closeOrderByNo(String no);

    /**
     * 获取所有微信支付成功的支付单号
     *
     * @param minDateTime 最小时间
     */
    List<String> getPayNoByWeChatPayed(LocalDateTime minDateTime);

}
